/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package gestionform;

import dao.exception.DAOConnectionException;
import dao.exception.DAOEnseignantException;
import dao.exception.DAOEtudiantException;
import dao.exception.DAOException;
import dao.exception.DAOPersonneException;
import dao.interfaces.DAOEtudiant;
import static gestionform.GestionInfos.CHAMP_DATE_NAISS;
import static gestionform.GestionInfos.CHAMP_LOGIN;
import static gestionform.GestionInfos.CHAMP_NOM;
import static gestionform.GestionInfos.CHAMP_PASS;
import static gestionform.GestionInfos.CHAMP_PRENOM;
import static gestionform.GestionInfos.CHAMP_TYPE_UTILISATEUR;
import java.sql.Date;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import model.Cour;
import model.Enseignant;
import model.Etudiant;
import model.Examen;
import model.Moyenne;
import model.Note;
import model.Personne;
import utils.DateUtils;
import utils.DateUtilsException;

/**
 *
 * @author Paul
 */
public class GestionEtudiant extends GestionInfos {

    private DAOEtudiant daoEtudiant;

    public GestionEtudiant(DAOEtudiant daoEtud) {
        this.daoEtudiant = daoEtud;
    }

    public Etudiant connexionEtudiant(HttpServletRequest request) {
        /* Récupération des champs du formulaire */
        String login = getValeurChamp(request, CHAMP_LOGIN);
        String password = getValeurChamp(request, CHAMP_PASS);
        Etudiant etudiant = new Etudiant();
        try {
            etudiant = daoEtudiant.rechercheEtudiant(login, password);
        } catch (DAOEtudiantException daoEtudEx) {
            resultat = daoEtudEx.getMessage();
        }
        return etudiant;
    }

    public void createCompte(String typeUtilisateur, HashMap<String, String> listeChamps) {
        Etudiant etud = getEtudiant(listeChamps);
        if (erreurs.isEmpty()) {
            try {
                daoEtudiant.create(etud);
                resultat = "L'étudiant " + etud.getNom() + " " + etud.getPrenom()
                        + " a bien été crée";
            } catch (DAOEtudiantException daoEnsEx) {
                resultat = daoEnsEx.getMessage();
            } catch (DAOConnectionException daocEx) {
                resultat = daocEx.getMessage();
            }
        }
    }

    private Etudiant getEtudiant(HashMap<String, String> listeChamps) {
        Etudiant etud = new Etudiant();
        for (Map.Entry<String, String> champs : listeChamps.entrySet()) {
            String idChamp = champs.getKey();
            String valueChamp = champs.getValue();
            if (CHAMP_NOM.equals(idChamp)) {
                etud.setNom(valueChamp);
            } else if (CHAMP_PRENOM.equals(idChamp)) {
                etud.setPrenom(valueChamp);
            } else if (CHAMP_DATE_NAISS.equals(idChamp)) {
                try {
                    Date convertedDateNaissance = DateUtils.getConvertedDateToSQLDate(valueChamp);
                    etud.setDatenaissance(convertedDateNaissance);
                } catch (DateUtilsException dateEx) {
                    setErreur(CHAMP_DATE_NAISS, dateEx.getMessage());
                }
            } else if (CHAMP_TYPE_UTILISATEUR.equals(idChamp)) {
                etud.setTypeUtilisateur(valueChamp);
            } else if (CHAMP_LOGIN.equals(idChamp)) {
                etud.setLogin(valueChamp);
            } else if (CHAMP_PASS.equals(idChamp)) {
                etud.setMdp(valueChamp);
            }
        }
        return etud;
    }

    public ArrayList<Etudiant> getAllEtudiants() {
        ArrayList<Etudiant> listeEtudiants = new ArrayList<Etudiant>();
        try {
            listeEtudiants = daoEtudiant.getAllEtudiant();
        } catch (DAOEtudiantException daoEnsEx) {
            resultat = daoEnsEx.getMessage();
        } catch (DAOConnectionException daocEx) {
            resultat = daocEx.getMessage();
        }
        return listeEtudiants;
    }

    public ArrayList<Etudiant> getAllEtudiantsFromCours(int id) {
        ArrayList<Etudiant> listeEtudiants = new ArrayList<Etudiant>();
        try {
            listeEtudiants = daoEtudiant.getAllEtudiantFromCours(id);
        } catch (DAOEtudiantException daoEnsEx) {
            resultat = daoEnsEx.getMessage();
        } catch (DAOConnectionException daocEx) {
            resultat = daocEx.getMessage();
        }
        return listeEtudiants;

    }

    public ArrayList<Moyenne> getAffMoyennes(Etudiant e, ArrayList<Cour> listeCours, ArrayList<Examen> listeExamens, ArrayList<Note> listeNotes) {
        ArrayList<Moyenne> listeMoyenne = new ArrayList<Moyenne>();
        try {
            listeMoyenne = daoEtudiant.affMoyennes(e, listeCours, listeExamens, listeNotes);
        } catch (DAOEtudiantException daoEnsEx) {
            resultat = daoEnsEx.getMessage();
        } catch (DAOConnectionException daocEx) {
            resultat = daocEx.getMessage();
        }
        return listeMoyenne;
    }

    public Float affMoyenneGeneral(ArrayList<Moyenne> listeMoyenne) {
        Float moy = null;
        try {
            moy = daoEtudiant.moyenneGeneral(listeMoyenne);
        } catch (DAOEtudiantException daoEnsEx) {
            resultat = daoEnsEx.getMessage();
        } catch (DAOConnectionException daocEx) {
            resultat = daocEx.getMessage();
        }
        return moy;
    }
}
